﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using System.Data;
using System.Data.SqlClient;


namespace Persistencia
{
    /// <summary>
    /// Classe para peristir o objeto no banco
    /// </summary>
    public class Pessoa_DAL
    {
        /// <summary>
        /// Método para se listar todas as pessoas
        /// </summary>
        /// <returns>Retorna uma lista de objetos do tipo pessoa</returns>
        public List<Pessoa_EN> Listar() 
        {
            List<Pessoa_EN> lista = new List<Pessoa_EN>();

            Pessoa_EN p1 = new Pessoa_EN();
            Pessoa_EN p2 = new Pessoa_EN();

            p1.Nome = "Neto";
            p1.Email = "neto@devgoias.net";
            p1.Endereco = "Rua da minha casa";
            p1.DataNascimento = DateTime.Now;
            p1.DataCadastro = DateTime.Now;

            p2.Nome = "Neto 2";
            p2.Email = "neto2@devgoias.net";
            p2.Endereco = "Rua da minha casa 2";
            p2.DataNascimento = DateTime.Now;
            p2.DataCadastro = DateTime.Now;

            lista.Add(p1);
            lista.Add(p2);

            return lista;
        }

        // Sobrecarga do metodo listar

        /// <summary>
        /// Métodos para se listar uma pessoa de acordo com ID de parametro
        /// </summary>
        /// <param name="id">Chave primária do objeto persistido</param>
        /// <returns>Retorna um objeto do tipo pessoa</returns>
        public Pessoa_EN Listar(int id)
        {
            Pessoa_EN p = new Pessoa_EN();
            p.PessoaID = id;
            return p;
        }
        public DataTable ListarNovo() 
        {
            //Criando objeto de conexao
            SqlConnection conexao = new SqlConnection();
            conexao.ConnectionString = "Data Source=DES-05-CT\\SQLEXPRESS;Initial Catalog=Vinicius;Integrated Security=True";
            //Criando objeto de comando
            SqlCommand comando = new SqlCommand();
            comando.Connection = conexao;

            comando.CommandText = "SELECT * FROM Pessoa ";

            SqlDataAdapter adaptador = new SqlDataAdapter();
            adaptador.SelectCommand = comando;

            DataTable tabela = new DataTable();
            adaptador.Fill(tabela);

            
            return tabela;
        }

        public int Inserir(Pessoa_EN pessoa)
        {
            SqlConnection conexao = new SqlConnection();
            conexao.ConnectionString = "Data Source=DES-05-CT\\SQLEXPRESS;Initial Catalog=Vinicius;Integrated Security=True";

            SqlCommand comando = new SqlCommand();
            comando.Connection = conexao;
            comando.CommandText = "INSERT INTO Pessoa (Nome, Email, Endereco, DataNascimento, DataCadastro) VALUES (@Nome, @Email, @Endereco, @DataNascimento, @DataCadastro)";

            comando.Parameters.Add("@Nome", SqlDbType.Text, 50, "Nome").Value = pessoa.Nome;
            comando.Parameters.Add("@Email", SqlDbType.Text, 50, "Email").Value = pessoa.Email;
            comando.Parameters.Add("@Endereco", SqlDbType.Text, 50, "Endereco").Value = pessoa.Endereco;
            comando.Parameters.Add("@DataNascimento", SqlDbType.DateTime, 18, "DataNascimento").Value = pessoa.DataNascimento;
            comando.Parameters.Add("@DataCadastro", SqlDbType.DateTime, 18, "DataCadastro").Value = pessoa.DataCadastro;

            //abrir conexao
            conexao.Open();
            int aux = comando.ExecuteNonQuery();
            conexao.Close();

            return aux;  
        }
        public int Excluir(Pessoa_EN pessoa)
        {
            SqlConnection conexao = new SqlConnection();
            conexao.ConnectionString = "Data Source=DES-05-CT\\SQLEXPRESS;Initial Catalog=Vinicius;Integrated Security=True";

            SqlCommand comando = new SqlCommand();
            comando.Connection = conexao;
            comando.CommandText = "DELETE FROM Pessoa WHERE PessoaID = @PessoaID";

            comando.Parameters.Add("@PessoaID", SqlDbType.Int, 10, "PessoaId").Value = pessoa.PessoaID;

            conexao.Open();
            int aux = comando.ExecuteNonQuery();
            conexao.Close();

            return aux;

            
        }
        public List<Pessoa_EN> ListarPessoas()
        {
            SqlConnection conexao = new SqlConnection();
            conexao.ConnectionString = "Data Source=DES-05-CT\\SQLEXPRESS;Initial Catalog=Vinicius;Integrated Security=True";

            SqlCommand comando = new SqlCommand();
            comando.Connection = conexao;

            Pessoa_EN p;

            List<Pessoa_EN> lista = new List<Pessoa_EN>();
            SqlDataReader lerdados;

            comando.CommandText = "SELECT * FROM Pessoa ";

            conexao.Open();

            lerdados = comando.ExecuteReader();

            while (lerdados.Read())
            {
                p = new Pessoa_EN();
                p.PessoaID = (int)lerdados["PessoaID"];
                p.Nome = (string)lerdados["Nome"];
                p.Email = (string)lerdados["Email"];
                p.DataNascimento = (DateTime)lerdados["DataNascimento"];
                p.DataCadastro = (DateTime)lerdados["DataCadastro"];

                lista.Add(p);
            }

            conexao.Close();

            return lista;


        }
    }
}
